package edu.aysf.config;

/*
 * @Author 郑老师
 * @Version: 1.0
 * @Desc 原文链接：https://blog.csdn.net/weixin_62372981/article/details/133988999
 * @Date 2024-12-06 11:27
 * @Update
 */
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator prefixRouteLocator(RouteLocatorBuilder builder) {

//    // 写法1  以下写法同时多个route只有一个有效，可能兼容性问题
//    return builder
            // 路由器集合
//           .routes()
//            .route("cookie_route",
//                    r -> r
//                    .cookie("city","anyang")
////                  .uri("http://localhost:8081"))
//                            // 具体的微服务 lb 负载均衡
//                    .uri("lb://order-service"))
//            .route("host_route",
//                    r -> r
//                    .host("localhost:9001")
////                  .uri("http://localhost:8081"))
//                    // 具体的微服务 lb 负载均衡
//                    .uri("lb://order-service"))
            // 路由器  id---路由的id
//           .route("path_route",
//                     // 具体的路由r;  path断言----路径必须以api开始
//                    r -> r
//                    .path("/api/**")
//                     // 过滤器  忽略路径path中的第1层(api)
//                    .filters(f -> f.stripPrefix(1))
////                  .uri("http://localhost:8081"))
//                     // 具体的微服务 lb 负载均衡
//                    .uri("lb://order-service"))
            // 真正的创建路由
//           .build();

    // 写法2 2个route只能写一个，有冲突
    RouteLocatorBuilder.Builder routes = builder.routes();
    routes.route("path_route", r -> r.path("/api/**").filters(f -> f.stripPrefix(1)).uri("lb://order-service"));
//    routes.route("host_route", r -> r.host("localhost:9000").uri("lb://order-service"));
    return routes.build();

    }

//    @Bean
//    public RouteLocator cookieRouteLocator(RouteLocatorBuilder builder) {
//
//        return builder.routes()
//                .route("cookie_route",
//                        r -> r
//                        .cookie("city", "anyang")
//                        .uri("lb://order-service"))
//                .build();
//    }

//    @Bean
//    public RouteLocator methodRouteLocator(RouteLocatorBuilder builder) {
//
//        return builder.routes()
//                .route("method_route",
//                        r -> r
//                        .method("GET")
//                        .uri("lb://order-service"))
//                .build();
//    }


}
